﻿using System;
using System.Drawing;
using System.Windows.Forms;
using System.Xml;
using System.Collections;
using System.Collections.Generic;
using Engine;
using Library;
using MyControls;
using Gencode;

namespace GameTool
{
    public partial class PhepTinh_Form1 : Form
    {
        public MainForm mainForm;

        int CurrentGroup = 0;
        int CurrentElement = 0;
        private List<List<PTCom>> _components = null;
        private List<List<PTCom>> Components
        {
            set { _components = value; }
            get
            {
                if (_components == null)
                {
                    _components = new List<List<PTCom>>();//khoi tao cha
                }
                if (_components.Count == 0)
                {
                    for (int i = 0; i < 3; i++)//tao ba con ~ 3 level
                    {
                        _components.Add(new List<PTCom>());
                        AddGroup(i.ToString());
                    }
                }

                txtCounter.Text = _components[CurrentGroup].Count.ToString();
                this.txtPage.Text = (CurrentElement +1).ToString();
                if (_components[CurrentGroup].Count == 0)
                    this.txtPage.Text = "Không có";
                return _components;
            }
        }
        private bool _isClearTab = false;

        public PhepTinh_Form1()
        {
            InitializeComponent();
        }

        private void LoadXML(string url, string filename)
        {
            try
            {
                Reset();

                XmlDocument xDoc = new XmlDocument();

                ftp_main.download(url, filename);
                xDoc.Load(filename);

                this.cmbLop.Text = PhepTinh_Form2.Instance.Lop;
                this.cmbVong.Text = PhepTinh_Form2.Instance.Vong;
                // Parser File Xml.

                XmlNodeList time = xDoc.GetElementsByTagName("time");
                string timeString = time[0].InnerText;
                this.nUDThoiGian.Value = Int32.Parse(timeString);

                XmlNodeList pointNode = xDoc.GetElementsByTagName("point");
                string point = pointNode[0].InnerText;
                this.nUDDiem.Value = Int32.Parse(point);

                XmlNodeList numLevel1Node = xDoc.GetElementsByTagName("numLevel1");
                string numLevel1 = numLevel1Node[0].InnerText;
                if (numLevel1.Length > 0)
                    this.nUDDe.Value = Convert.ToByte(numLevel1);
                else
                    this.nUDDe.Value = 0;

                XmlNodeList numLevel2Node = xDoc.GetElementsByTagName("numLevel2");
                string numLevel2 = numLevel2Node[0].InnerText;
                if (numLevel2.Length > 0)
                    this.nUDBinhThuong.Value = Convert.ToByte(numLevel2);
                else
                    this.nUDBinhThuong.Value = 0;

                XmlNodeList numLevel3Node = xDoc.GetElementsByTagName("numLevel3");
                string numLevel3 = numLevel3Node[0].InnerText;
                if (numLevel3.Length > 0)
                    this.nUDKho.Value = Convert.ToByte(numLevel3);
                else
                    this.nUDKho.Value = 0;
                // Dua cac thong tin ve cau hoi
                XmlNodeList numQuestions = xDoc.GetElementsByTagName("question");

                for (int i = 0; i < numQuestions.Count; i++)
                {
                    XmlAttributeCollection attr = numQuestions[i].Attributes;                    
                    int type = System.Convert.ToInt32(attr[0].Value);
                    int level = System.Convert.ToInt32(attr[1].Value);
                    int open = System.Convert.ToInt32(attr[2].Value);

                    XmlNodeList OneQuest = numQuestions[i].ChildNodes;
                    string originList = OneQuest[0].InnerText;
                    string list = OneQuest[1].InnerText;
                    string answer = OneQuest[2].InnerText;

                    PTCom ptCom = new PTCom();
                    ptCom.InputData(originList, list, answer, type, level, open);

                    AddCom(ptCom, level, Components[level].Count);
                }
                if (Components.Count > 0)
                {
                    if (Components[0].Count > 0)
                    {
                        ShowCom(0, 0);
                    }
                }                
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        /// <summary>
        /// Đẩy dữ liệu lên server
        /// </summary>
        /// <returns></returns>
        private string UploadXML()
        {
            string result = string.Empty;
            try
            {
                XmlDocument doc = new XmlDocument();
                XmlNode docNode = doc.CreateXmlDeclaration("1.0", "UTF-8", null);
                doc.AppendChild(docNode);
                XmlNode examinateNode = doc.CreateElement("examinate");
                doc.AppendChild(examinateNode);

                // Tao ra so cau hoi muc 1
                XmlNode numLevel1 = doc.CreateElement("numLevel1");
                string questlevel1 = this.nUDDe.Value.ToString();
                numLevel1.AppendChild(doc.CreateTextNode(questlevel1));
                examinateNode.AppendChild(numLevel1);

                // Tao ra so cau hoi muc 2
                XmlNode numLevel2 = doc.CreateElement("numLevel2");
                string questlevel2 = this.nUDBinhThuong.Value.ToString();
                numLevel2.AppendChild(doc.CreateTextNode(questlevel2));
                examinateNode.AppendChild(numLevel2);

                // Tao ra so cau hoi muc 3
                XmlNode numLevel3 = doc.CreateElement("numLevel3");
                string questlevel3 = this.nUDKho.Value.ToString();
                numLevel3.AppendChild(doc.CreateTextNode(questlevel3));
                examinateNode.AppendChild(numLevel3);

                XmlNode pointNode = doc.CreateElement("point");
                pointNode.AppendChild(doc.CreateTextNode(this.nUDDiem.Value.ToString()));
                examinateNode.AppendChild(pointNode);

                XmlNode giftNode = doc.CreateElement("giftPoint");
                giftNode.AppendChild(doc.CreateTextNode("0")); // FIX CODE
                examinateNode.AppendChild(giftNode);

                XmlNode timeNode = doc.CreateElement("time");
                timeNode.AppendChild(doc.CreateTextNode(this.nUDThoiGian.Value.ToString()));
                examinateNode.AppendChild(timeNode);

                XmlNode questionsNode = doc.CreateElement("questions");

                // FOR
                for (int i = 0; i < this.Components.Count; i++)
                {
                    ;
                    //List<ExpCom> GroupQuest = Components[i];
                    for (int j = 0; j < this.Components[i].Count; j++)
                    {
                        PTCom thisPTCom = this.Components[i][j];
                        if (!thisPTCom.CheckValidateData())
                        {
                            int ele = j + 1;
                            string gro = "";
                            if (i == 0) { gro = "dễ"; }
                            if (i == 1) { gro = "trung bình"; }
                            if (i == 2) { gro = "khó"; }
                            return "Có lỗi ở phần tử thứ " + ele + " mức " + gro;
                        }
                        thisPTCom.GetData();

                        XmlNode qNode = doc.CreateElement("question");

                        XmlAttribute type = doc.CreateAttribute("type");
                        type.Value = thisPTCom.Type.ToString();
                        qNode.Attributes.Append(type);

                        XmlAttribute level = doc.CreateAttribute("level");
                        level.Value = i.ToString();
                        qNode.Attributes.Append(level);

                        XmlAttribute open = doc.CreateAttribute("open");
                        open.Value = thisPTCom.Open.ToString();
                        qNode.Attributes.Append(open);

                        XmlNode originList = doc.CreateElement("originList");
                        originList.AppendChild(doc.CreateTextNode(thisPTCom.OriginList));
                        qNode.AppendChild(originList);

                        XmlNode list = doc.CreateElement("list");
                        list.AppendChild(doc.CreateTextNode(thisPTCom.List));
                        qNode.AppendChild(list);

                        XmlNode answer = doc.CreateElement("answer");
                        answer.AppendChild(doc.CreateTextNode(thisPTCom.Answer));
                        qNode.AppendChild(answer);

                        questionsNode.AppendChild(qNode);
                    }
                }
                // END FOR

                examinateNode.AppendChild(questionsNode);
                string xmlFile = "1.xml";
                doc.Save(xmlFile);
                UploadFile.UpFtpFile(GetXMLPath(), cmbVong.Text, xmlFile, xmlFile);
                System.IO.File.Delete(xmlFile);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
            return result;
        }
        /// <summary>
        /// Lấy vị trí cần lưu file xml trên server
        /// </summary>
        /// <returns></returns>
        private string GetXMLPath()
        {
            return Common.config.pathXml + "\\" + this.cmbLop.Text + "\\Game7";
        }

        private void Review_Click(object sender, EventArgs e)
        {
            DialogResult _dialogResult =
                    MessageBox.Show(
                        "Dữ liệu sẽ bị mất nếu bạn chưa tải lên server. Bạn có chắc chắn muốn xem đề?\n\n\n(Nhấn Yes chương trình sẽ xóa bỏ mọi dữ liệu hiện có, nếu bạn chưa tải lên server\nNhấn No để giữ nguyên trạng thái)",
                        "Xac nhan thao tac", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
            if (_dialogResult == DialogResult.No)
                return;
            
            try
            {
                PhepTinh_Form2.Instance.ShowDialog();
                string lop = PhepTinh_Form2.Instance.Lop;
                string vong = PhepTinh_Form2.Instance.Vong;
                String url = Common.config.pathXml + "\\" + lop + "\\Game7\\" + vong;
                if (lop.Length > 0 && vong.Length > 0)
                {
                    #region Reset
                    pnlCmd.Visible = pnlQuestion.Visible = true;
                    for (int i = 0; i < Components.Count; i++)
                    {
                        List<PTCom> thiscomponent = Components[i];
                        while (thiscomponent.Count > 0)
                        {
                            DelCom(i, 0);
                        }
                    }
                    this._isClearTab = true;
                    tabGroup.TabPages.Clear();
                    this._isClearTab = false;
                    Components.Clear();
                    #endregion

                    LoadXML(url, "1.xml");
                }
                DangThuc_Form2.Instance.Lop = string.Empty;
                DangThuc_Form2.Instance.Vong = string.Empty;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        private void cmbLop_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                cmbVong.Items.Clear();
                foreach (RoundInfo roundInfo in Common.RoundList[cmbLop.SelectedIndex])
                {
                    this.cmbVong.Items.AddRange(new object[] { "level" + roundInfo.RoundNumber });
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        /// <summary>
        /// Đổ dữ liệu vào các combobox
        /// </summary>
        private void InitData()
        {
            try
            {
                foreach (ClassInfo c in Common.ClassList)
                {
                    if (User.CheckPermission(c.Name))
                    {
                        cmbLop.Items.AddRange(new object[] { "lop" + c.Name });
                    }
                }
                if (cmbLop.Items.Count > 0)
                {
                    cmbLop.SelectedIndex = 0;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        private void PhepTinh_Form1_Load(object sender, EventArgs e)
        {
            InitData();
            pnlCmd.Visible = pnlQuestion.Visible = false;
        }

        /// <summary>
        /// Add các tabpage (~ nhóm)
        /// </summary>
        /// <param name="groupName">Tên nhóm</param>
        private void AddGroup(string groupName)
        {
            try
            {
                TabPage tab = new TabPage();
                tab.Name = groupName;
                tab.Text = Common.Level[groupName];
                this.tabGroup.TabPages.Add(tab);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        /// <summary>
        /// Thêm component
        /// </summary>
        /// <param name="com">Component cần thêm</param>
        /// <param name="group">Nhóm cần thêm</param>
        /// <param name="index">Vị trí thêm</param>
        private void AddCom(PTCom com, int group, int index)
        {
            try
            {
                com.Visible = false;
                Components[group].Insert(index, com);
                this.pnlQuestion.Controls.Add(com);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        /// <summary>
        /// Hiển thị các component
        /// </summary>
        private void ShowCom(int group, int index)
        {
            try
            {
                this.Components[group][index].Visible = true;
                this.Components[group][index].Location = new Point(10, 10);
                this.Components[group][index].ShowAll();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        /// <summary>
        /// Xóa các component
        /// </summary>
        /// <param name="group">Nhóm cần xóa</param>
        /// <param name="index">Vị trí cần xóa</param>
        private void DelCom(int group, int index)
        {
            try
            {
                if (group >= Components.Count)
                {
                    return;
                }
                List<PTCom> thiscomponent = Components[group];
                if (thiscomponent.Count <= 0)
                {
                    return;
                }
                this.pnlQuestion.Controls.Remove(thiscomponent[index]);
                thiscomponent.RemoveAt(index);
                this.CurrentElement++;
                if (this.CurrentElement >= thiscomponent.Count)
                {
                    this.CurrentElement = thiscomponent.Count - 1;
                }

                #region Focus
                if (-1 < index && index < thiscomponent.Count)
                {
                    thiscomponent[index].Focus();
                }
                #endregion
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        /// <summary>
        /// Reset các control về giá trị ban đầu.
        /// </summary>
        private void Reset()
        {
            try
            {

                chkViother.Checked = chkViSchool.Checked = !(chkViolympic.Checked = true);
                if (cmbLop.Items.Count > 0)
                    cmbLop.SelectedIndex = 0;
                cmbVong.SelectedIndex = -1;
                nUDThoiGian.Value = nUDThoiGian.Minimum;
                nUDDe.Value = nUDDe.Minimum;
                nUDBinhThuong.Value = nUDBinhThuong.Minimum;
                nUDKho.Value = nUDKho.Minimum;
                nUDDiem.Value = nUDDiem.Minimum;
                txtDeBai.Clear();
                pnlCmd.Visible = pnlQuestion.Visible = true;

                for (int i = 0; i < Components.Count; i++)
                {
                    List<PTCom> thiscomponent = Components[i];
                    while (thiscomponent.Count > 0)
                    {
                        DelCom(i, 0);
                    }
                }

                Components.Clear();
                _isClearTab = true;
                this.tabGroup.TabPages.Clear();
                _isClearTab = false;

                this.CurrentElement = this.CurrentGroup = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        private void PrePage_Click(object sender, EventArgs e)
        {
            HideCom();
            this.CurrentElement--;
            if (this.CurrentElement < 0)
            {
                this.CurrentElement = 0;
                MessageBox.Show("Đây là trang đầu tiên.");
            }
            if (this.Components.Count > CurrentGroup)
            {
                if (this.Components[CurrentGroup].Count > 0)
                {
                    ShowCom(CurrentGroup, CurrentElement);
                }
            }
        }

        private void NextPage_Click(object sender, EventArgs e)
        {
            HideCom();
            this.CurrentElement++;
            if (this.CurrentElement >= this.Components[this.CurrentGroup].Count)
            {
                this.CurrentElement = this.Components[this.CurrentGroup].Count - 1;
                MessageBox.Show("Đây là trang cuối cùng.");
            }
            if (this.Components.Count > CurrentGroup)
            {
                if (this.Components[CurrentGroup].Count > 0)
                {
                    ShowCom(CurrentGroup, CurrentElement);
                }
            }
        }

        private void HideCom()
        {
            if (this.Components.Count > CurrentGroup)
            {
                if (this.Components[CurrentGroup].Count > 0 && CurrentElement < this.Components[CurrentGroup].Count && CurrentElement >=0)
                {
                    this.Components[this.CurrentGroup][this.CurrentElement].Visible = false;
                }
            }            
        }

        private void Upload_Click(object sender, EventArgs e)
        {
            try
            {
                DialogResult _dialogResult;
                string _mess;
                #region Validate?
                _mess = ValidateInput();
                if (_mess.Length > 0)
                {
                    _mess += "\nVui lòng kiểm tra lại!";
                    MessageBox.Show(_mess, "Thong bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
                #endregion
                #region Exists đề bài?

                bool _exists = ftp_main.CheckExists(GetXMLPath() + "\\" + cmbVong.Text, "1.xml");
                if (_exists)
                {
                    _dialogResult = MessageBox.Show("Đề bài của lớp này, vòng này đã có. Bạn có muốn ghi đè hay không?",
                                                   "Xac nhan thao tac", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (_dialogResult == DialogResult.No)
                    {
                        return;
                    }
                }

                #endregion
                #region Warning
                _mess = Warning();
                if (_mess.Length > 0)
                {
                    _mess += "\nBạn có muốn tải lên server?";
                    _dialogResult = MessageBox.Show(_mess, "Xac nhan thao tac", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
                    if (_dialogResult == DialogResult.No)
                    {
                        return;
                    }
                }
                #endregion
                string result = UploadXML();
                if (result.Length > 0)
                {
                    MessageBox.Show(result);
                }
                else
                {
                    Common.LogAction(Library.Action.Update);
                    MessageBox.Show("Tải đề lên server thành công!", "Thong bao", MessageBoxButtons.OK,
                                    MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        /// <summary>
        /// Kiểm tra tính hợp lệ của dữ liệu đầu vào trước khi lưu
        /// </summary>
        /// <returns>Thông điệp trả về: thông điệp trắng là hợp lệ</returns>
        private string ValidateInput()
        {
            string _mess = string.Empty;
            try
            {
                if (!chkViolympic.Checked && !chkViSchool.Checked && !chkViother.Checked)
                {
                    _mess = "Bạn chưa chọn nhập liệu cho chương trình nào.";
                    chkViolympic.Focus();
                    return _mess;
                }
                if (cmbLop.SelectedIndex < 0)
                {
                    _mess = "Bạn chưa chọn lớp.";
                    cmbLop.DroppedDown = true;
                    cmbLop.Focus();
                    return _mess;
                }
                if (cmbVong.SelectedIndex < 0)
                {
                    _mess = "Bạn chưa chọn Vòng.";
                    cmbVong.DroppedDown = true;
                    cmbVong.Focus();
                    return _mess;
                }

                int _totalQuestion = (int)(nUDDe.Value + nUDBinhThuong.Value + nUDKho.Value);
                if (_totalQuestion == 0)
                {
                    _mess = "S. câu dễ + S. câu tb + S. câu khó > 0.";
                    nUDDe.Focus();
                    return _mess;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
            return _mess;
        }

        private string Warning()
        {
            string _mess = string.Empty;
            try
            {
                int _e = 0;
                int _m = 0;
                int _h = 0;
                foreach (List<PTCom> list in Components)
                {
                    foreach (PTCom expCom in list)
                    {
                        switch (expCom.Level)
                        {
                            case 0:
                                _e++;
                                break;
                            case 1:
                                _m++;
                                break;
                            case 2:
                                _h++;
                                break;
                        }
                    }
                }
                if (_e < nUDDe.Value)
                {
                    if (_mess.Length > 0)
                        _mess += "\n";
                    _mess += "- S. câu dễ chưa đủ";
                }

                if (_m < nUDBinhThuong.Value)
                {
                    if (_mess.Length > 0)
                        _mess += "\n";
                    _mess += "- S. câu tb chưa đủ";
                }

                if (_h < nUDKho.Value)
                {
                    if (_mess.Length > 0)
                        _mess += "\n";
                    _mess += "- S. câu khó chưa đủ";
                }

                if (_mess.Length > 0)
                    _mess += "\nđể game chạy!";
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
            return _mess;
        }

        private void cmdAdd_Click(object sender, EventArgs e)
        {
            try
            {
                PTCom com = new PTCom();

                com.Level = CurrentGroup;
                HideCom();
                CurrentElement = 0;
                AddCom(com, CurrentGroup, 0);
                ShowCom(CurrentGroup, CurrentElement);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        private void tabGroup_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                /*
                 * Khi load đề lên thì phải xóa hết các nhóm của đề cũ
                 * Để xóa các nhóm cũ thì phải xóa các tabpage
                 * Xóa tabpage thì sự kiện này xảy ra và sinh lỗi
                 * Checkk biến để biết khi xóa tabpage ta không xử lý gì cả
                 */
                if (_isClearTab)
                    return;
                HideCom();
                CurrentGroup = tabGroup.SelectedIndex;
                CurrentElement = 0;
                if(this.Components.Count > CurrentGroup)
                {
                    if (this.Components[CurrentGroup].Count > 0)
                    {
                        ShowCom(CurrentGroup, CurrentElement);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        private void cmdTaoDeMoi_Click(object sender, EventArgs e)
        {
            try
            {
                DialogResult _dialogResult =
                    MessageBox.Show("Dữ liệu sẽ bị mất nếu bạn chưa tải lên server. Bạn có chắc chắn muốn tạo mới?\n\n\n(Nhấn Yes chương trình sẽ xóa bỏ mọi dữ liệu hiện có, nếu bạn chưa tải lên server\nNhấn No để giữ nguyên trạng thái)",
                        "Xac nhan thao tac", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (_dialogResult == DialogResult.Yes)
                    Reset();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Có lỗi!", "Canh bao", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                Common.LogException(ex);
                Application.Exit();
            }
        }

        private void cmdDel_Click(object sender, EventArgs e)
        {
            DialogResult _dialogResult = MessageBox.Show("Xóa phần tử này?", "Xac nhan thao tac",
                                                            MessageBoxButtons.YesNo, MessageBoxIcon.Question);
            if (_dialogResult == DialogResult.No)
            {
                return;
            }

            DelCom(CurrentGroup, CurrentElement);

            if (this.Components[CurrentGroup].Count > 0 && CurrentElement >= 0 && CurrentElement < this.Components[CurrentGroup].Count)
            {
                ShowCom(CurrentGroup, CurrentElement);
            }
            else
            {
                MessageBox.Show("Đã hết các phần tử trong nhóm này.");
            }
        }      
    }
}
